package adfc2.core;

/**
 * Атомарное действие (сделать шаг, взять, бросить, выкопать клетку и т.п.). Может быть как мгновенным, так и
 * длительным (см. подклассы)
 */
public abstract class Action {
    // TODO проверка возможности
    public final Creature actor;

    /**
     * Завершено ли действие
     */
    public boolean completed = false;

    /**
     * Завершено ли действие неудачно
     */
    public boolean failed = false;

    public Action(Creature actor) {
        this.actor = actor;
    }

    /**
     * Прогресс действия
     */
    public abstract void tick(long dt);

    /**
     * Отмена действия
     */
    public abstract void cancel();

    protected final void completed() {
        completed = true;
    }

    protected final void failed() {
        completed = true;
        failed = true;
    }

    /**
     * Начало действия существом. Никаких изменений делать пока не нужно.
     */
    public void start() {
        System.out.println(actor + " started " + toString());
        actor.startAction(this);
    }

}
